/*
 * IUserModel.java
 * business
 *
 * Created by ChenTao on 2016/9/9.
 *
 * Copyright (c) 2016年 yidiandao. All rights reserved.
 */

package com.yidiandao.business.data.model;

import com.yidiandao.business.data.bean.User;
import com.yidiandao.business.data.response.QueryUserInitInformationResponse;

import java.io.File;

/**
 * UserModel层接口.
 */
public interface IUserModel {

    void login(
            String phoneNumber,
            String password,
            String deviceId,
            String tag,
            OnLoginListener listener);

    /**
     * 获取手机验证码
     */
    void getAuthCode(String phoneNumber, String tag, OnAccessNetListener listener);

    void postRefreshGoodsPriceEvent();

    /**
     * 用户注册
     */
    void register(
            String shopName,
            String phoneNumber,
            String authCode,
            String password,
            String invitationCode,
            String tag,
            OnAccessNetListener listener);

    /**
     * 清空Token,并登录
     *
     * @param deviceId  设备id
     * @param postEvent 是否发送RefreshGoodsPriceEvent
     */
    void logout(String deviceId, boolean postEvent, String tag, OnAccessNetListener listener);

    /**
     * 清除用户信息
     *
     * @param postEvent 是否发送RefreshGoodsPriceEvent,以刷新用户价格
     */
    void clearUserInfo(boolean postEvent);

    /**
     * 当前用户是否登录
     */
    boolean isLogin();

    File getTakePhotoTempFile();

    File getPhotoAlbumsTempFile();

    /**
     * 重置密码
     */
    void resetPassword(
            String phoneNumber,
            String newPassword,
            String authCode,
            String tag,
            OnAccessNetListener listener);

    /**
     * 上传店铺营业执照
     */
    void uploadShopLicense(File file, String tag, OnUploadLicenseListener listener);

    /**
     * 上传个人头像
     */
    void uploadAvatar(File file, String tag, OnUploadLicenseListener listener);

    /**
     * 提交审核资料
     *
     * @param typeId         用户类型id
     * @param userId         用户Id
     * @param realName       真实姓名
     * @param provinceId     省份id
     * @param cityId         城市id
     * @param areaId         区 县 id
     * @param address        详细地址
     * @param uploadImageUrl 营业执照在服务器的地址
     */
    void commitInformation(
            String typeId,
            String userId,
            String realName,
            int provinceId,
            int cityId,
            int areaId,
            String address,
            String uploadImageUrl,
            String tag,
            OnAccessNetListener listener);

    /**
     * 用户进入完善信息页面时，获取用户的部分信息
     */
    void initInformation(String mobile, String tag, OnInitInformationListener listener);

    /**
     * 个人信息界面
     */
    void getUserInfo(String tag, OnGetPersonalInfoListener listener);

    /**
     * 我的界面 获取个人信息
     */
    void getPersonalInfo(String tag, OnGetPersonalInfoListener listener);

    /**
     * 修改昵称
     */
    void setNickName(String nickName, OnAccessNetListener listener, String tag);

    /**
     * 修改性别
     */
    void setSex(String tag, String sex, OnAccessNetListener listener);

    void changePassword(
            String oldPassword, String newPassword, String tag, OnAccessNetListener listener);

    void setHasNewAgentPushMessage(boolean hasNewAgentMessage);

    boolean hasNewAgentPushMessage();

    void setHasNewOfferMessage(boolean hasNewOfferMessage);

    boolean hasNewOfferMessage();

    /**
     * 修改推送开关
     */
    void changePushSwitch(boolean isChecked);

    /**
     * 推送开关是否打开
     */
    boolean isPushSwitchOpen();

    /**
     * 检查店铺名称是否存在
     */
    void checkShopNameExist(String shopName, String tag);

    /**
     * 检查手机号码是否注册
     */
    void checkMobile(String phoneNumber, String tag, OnCheckListener listener);

    /**
     * 压缩图片
     */
    File pressImage(String path);

    /**
     * 检查是否已签到
     */
    void checkIsSign(String tag, OnCheckSignListener listener);

    String getLocatingCity();

    void setUserIdForBugly();


    interface OnAccessNetListener {

        void onSuccess();

        void onFailed();

        void onFinal();
    }

    interface OnLoginListener {

        void onSuccess(boolean needChangeAddress, String signCity);

        void onFailed();

        /**
         * 未填写审核资料
         */
        void onUnWriteInformation();

        void onFinal();
    }

    interface OnUploadLicenseListener {

        void onSuccess(String uploadPic, String pictureUrl);

        void onFailed();

        void onFinal();
    }

    interface OnCheckSignListener {
        void onSuccess(boolean visible);
    }

    interface OnInitInformationListener {

        void onSuccess(QueryUserInitInformationResponse.Data data);

        void onFailed();
    }

    interface OnGetPersonalInfoListener {

        void onSuccess(User user);

        void onFinal();
    }

    interface OnCheckListener {

        void onSuccess();

        boolean onFailed();

        boolean onError();
    }
}
